<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Php failide koondamine ühte faili, ehk include omadus</title>
    </head>
    <body>
        <?php
            /*
             * Koodi koondamise (include) võimalus ühte faili aitab meil kordusi vältida.
             * Näiteks, kui oleme ühes php failis loonud funktsiooni, mille
             * funktsionaalsus sobiks ideaalselt kasutamiseks ka teistes php failis,
             * siis pole ilmselgelt mõtet ühte ja sama funktsiooni mitu korda kirjutada.
             * 
             * See võimaldab arendamist ühtlasi ka loogilistesse üksustesse koondada.
             * Näiteks annab teha vaid funktsioonidele mõeldud spetsiaalsed php
             * failid, konstantidele mõeldud php failid jne. Seejärel neid lõpuks
             * peaprogrammi faili koondada ning neid edukalt kasutada.
             * 
             * Loome include näitlikustamiseks 2 faili. Ühes on php funktsioon, mille
             * me include funktsiooni abil siinse faili koosseisu kaasame ning 
             * antud funktsiooni ühtlasi välja kutsume. Olgu funktsiooni sisaldava 
             * faili nimi funktsiooni_sisaldav_fail.php.
             * include süntaks, mis näeb välja selline: 
             * include 'failiNimi';  
             * Kuna ta on spetsiaalne süntaks, pole include järel parameetri 
             * jaoks sulge vaja. Seda tuleb tähele panna ka siis, kui include 
             * võrdlust millegipärast if tingimuslauses kasutada.
             * 
             * NB! Järgnev failile viitamine pole seepärast kõige ilusam, et ta ei 
             * sisalda konkreetset teekonda failini (alates serveri algsest kaustast 
             * (nagu windowsi puhul näiteks C: ketas)). Teame aga, et siin failis 
             * välja kutsutav fail ei hakka meil ilmselt mujal asuma, kui samas kaustas
             * failiga "php_failide_koondamine_yhte_faili_ehk_include.php". Seepärast
             * me faili asukohale nii lihtsa viitamisega piirduda saame ja võime.
             * 
             * Tähtis on mitte ära unustada, et failid, mida koondatakse võivad omakorda
             * teisi faile include instruktsiooni abil koondada jne.
             */
            include_once 'funktsiooni_sisaldav_fail.php';
            
            //Nüüd saame funktsiooni välja kutsuda. 
            ytleKaruPyksid();
            
            /*
             * Lisaks on olemas includele pea täiesti sarnaste omadustega instruktsioon
             * nimega ja süntaksiga:
             * require 'failiNimi';
             * 
             * include ja require põhimõtteliselt ainsaks erinevuseks on see, kuidas
             * nad tegelevad näiteks säärase veaolukorraga, et koondatavat faili 
             * ei leitud. 
             * 
             * *require genereerib programmi täiesti lõpetava veateate (E_COMPILE_ERROR). 
             * Programm lõpetatakse vahetult require instruktsiooniga.
             * *include genereerib vaid hoiatuse (E_WARNING), mille järel programm 
             * järgmiselt realt koodi tavapärase käitamisega jätkab. 
             * Täpsemalt:
             * Includes - W3Schools [WWW] http://www.w3schools.com/php/php_includes.asp (26.01.2013)
             * ja
             * Includes - php.net [WWW] http://php.net/manual/en/function.include.php (26.01.2013)
             * 
             * Suurt programmi arendades võib aga juhtuda, et juba koondatud koodifailide
             * järgimisega kaob järg, kas fail on juba teisega koondatud, või mitte.
             * Kui aga kaks korda samasse faili üht ja sama teist faili koondadada/lisada
             * ehk includeda võib tekkida veaolukord. Seda seetõttu, et mäletatavasti
             * ei tohi globaalselt samanimelisi muutujaid ega funktsioone ühte faili
             * deklareerida. Include juures võib selline olukord aga kergelt tekkida.
             * Seetõttu on soovitatav suurte programmide puhul kasutada spetsiaalset 
             * lisamise instruktsiooni include_once().
             * include_once() koostab massiivi juba koondatud failidest. Iga uue lisamise
             * juures kontrollitakse massiivist, et ega sellist faili juba lisatud pole.
             * Kui on, siis interpretaator läheb lihtsalt uuest lisamise instruktsioonist üle,
             * kuna see on juba olemas (ignores it). Sedagi vaid juhul, kui
             * koodi lisatakse kogu aeg instruktsiooni include_once abil.
             */
        ?>
    </body>
</html>
